package com.hanxry.utils;


import com.hanxry.utils.entity.Organization;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 一个简单且常用的树形数据组装算法，两个for循环，不一定最佳，但真的很常用
 */
public class TreeUtils {
    public static List<Organization> buildTree(String topId, List<Organization> data) {
        List<Organization> treeList = new ArrayList<>();
        Map<String, Organization> Id2Org = new HashMap<>();

        for (Organization org : data) {
            //把所有的数据放到treeMap中，id为key
            Id2Org.put(org.getId(), org);
            //把顶层节点放到集合resultList中
            if (topId.equals(org.getParentId()) || org.getParentId() == null) {
                treeList.add(org);
            }
        }
        for (Organization org : data) {
            Organization parent = Id2Org.get(org.getParentId());
            // 不等于null，也就意味着有父节点
            if (parent != null) {
                if (org.getChildren() == null) {
                    org.setChildren(new ArrayList<>());
                }
                //把子节点 放到父节点childList当中
                parent.getChildren().add(org);
            }
        }
        return treeList;
    }
}